
 1000  *SAVE BROWN'S MOVE PROGRAM
 1010  *--------------------------------
 1020  * MOVE by H. Brown
 1030  * Jan 18/86
 1040  *--------------------------------
 1050  PTR    .EQ $00,01
 1060  BUFFER .EQ $200
 1070  RAMRD  .EQ $C002
 1080  RAMWRT .EQ $C004
 1090  ALTZP  .EQ $C008
 1100  BNKSEL .EQ $C073    RAMWORKS BANK SELECT REGISTER
 1110  ROM    .EQ $C082
 1120  RAM1   .EQ $C08B
 1130  RAM2   .EQ $C083
 1140  *--------------------------------
 1150         .OR $C00     ORG  AT BEGINNING OF A PAGE
 1160  *--------------------------------
 1170  COMMONPG
 1180         JMP INIT     BRUN OR JSR TO INITIALIZE
 1190         JMP MOVE     NORMAL ENTRY
 1200  *--------------------------------
 1210  *   INIT copies COMMONPG to all 64K banks
 1220  *--------------------------------
 1230  INIT   LDX BANKS    START WITH LAST 64K BANK
 1240  .1     LDA BANKS,X  GET  BANK #
 1250         STA BNKSEL   SELECT 64K BANK
 1260         STA RAMWRT+1 CHOOSE TO WRITE
 1270         LDY #0       COPY PAGE
 1280  .2     LDA COMMONPG,Y
 1290         STA COMMONPG,Y
 1300         INY
 1310         BNE .2       LOOP TO END OF PAGE
 1320         DEX
 1330         BNE .1       LOOP TO START OF TABLE
 1340         BEQ EXIT     RESTORE STANDARD MEMORY
 1350  *--------------------------------
 1360  *   enter MOVE with A = page (CX for 2nd DX)
 1370  *                   X = 64K bank #
 1380  *                   Carry SET for write, CLEAR for read
 1390  *--------------------------------
 1400  MOVE   BCS .3       BRANCH IF WRITING
 1410         CMP #$C0
 1420         BCS .1       BRANCH IF UPPER 16K
 1430         CPX #$FF     ---  READ 48K ---
 1440         BEQ .2       SKIP IF MAIN 64K
 1450         STA RAMRD+1  READ FROM AUX 48K
 1460         STX BNKSEL   SELECT 64K BANK
 1470         BNE .2
 1480  .1     JSR SEL16K   ---  READ 16K ---
 1490         CPX #$FF
 1500         BEQ .2       SKIP IF MAIN 64K
 1510         STX BNKSEL   SELECT 64K BANK
 1520         STA ALTZP+1  SELECT AUX 16K
 1530  .2     CLC
 1540         JSR COPYPAGE
 1550         BEQ EXIT
 1560  *--------------------------------
 1570  *   WRITING
 1580  *--------------------------------
 1590  .3     CMP #$C0
 1600         BCS .4       BRANCH IF UPPER 16K
 1610         CPX #$FF     ---  WRITE 48K ---
 1620         BEQ .5       SKIP IF MAIN 64K
 1630         STX BNKSEL
 1640         STA RAMWRT+1 WRITING TO AUX 48K
 1650         BNE .5
 1660  .4     JSR SEL16K   ---  WRITE 16K ---
 1670         CPX #$FF
 1680         BEQ .5
 1690         STX BNKSEL
 1700         STA ALTZP+1
 1710  .5     SEC
 1720         JSR COPYPAGE
 1730  *--------------------------------
 1740  EXIT   STY BNKSEL   RESORE STD 64K FOR VIDEO
 1750         STA RAMWRT   MAIN 48K
 1760         STA RAMRD
 1770         STA ALTZP    MAIN 16K
 1780         LDA ROM
 1790         RTS
 1800  *--------------------------------
 1810  *   BANKS is a table of 64K bank #'s, where
 1820  *      FF = main 64k, 00 = alt 64K when no RAMWORKS
 1830  *      00,04,08,0C = banks of a 256K RAMworks
 1840  *      1st entry is # of banks
 1850  *--------------------------------
 1860  BANKS  .HS 05       Five banks all told
 1870         .HS FF.00.04.08.0C
 1880  *--------------------------------
 1890  *   COPYPAGE copies 256 bytes
 1900  *      from (PTR) in specified bank to motherboard $200
 1910  *   or from motherboard $200 to (PTR) in specified bank
 1920  *--------------------------------
 1930  COPYPAGE
 1940         STA PTR+1
 1950         LDY #0
 1960         STY PTR
 1970         BCS .2 
 1980  .1     LDA (PTR),Y
 1990         STA BUFFER,Y
 2000         INY
 2010         BNE .1 
 2020         RTS
 2030  .2     LDA BUFFER,Y
 2040         STA (PTR),Y
 2050         INY
 2060         BNE .2 
 2070         RTS
 2080  *--------------------------------
 2090  *   SEL16K selects the appropriate bank in 16K area
 2100  *--------------------------------
 2110  SEL16K CMP #$D0
 2120         BCS .1 
 2130         LDY RAM2     C0   -> AUX D0
 2140         LDY RAM2
 2150         ADC #$10
 2160         RTS
 2170  .1     LDY RAM1     SELECT RD/WRT RAM
 2180         LDY RAM1
 2190         RTS
 2200  *--------------------------------

